如果以中文字面上的意思看,我會覺得完全相反,讓我很傻眼哈哈哈,每次看都要腦袋裡重新想一次,很不直觀XD
Javascript本身是同步語言,在瀏覽器中的JavaScript引擎執行,所以是從上到下逐行程式讀取並執行,然而當有程式碼比較花時間,可能會導致整個專案卡住,為解決這個狀況,發展出非同步。
後進先出
console.log("開始");
setTimeout(function() {
console.log("這是一個非同步操作,將在2秒後執行");
}, 2000);
setTimeout(function() {
console.log("這是一個非同步操作,將在1秒後執行");
}, 1000);
console.log("繼續執行其他程式碼");
結果:
//開始
//繼續執行其他程式碼
//這是一個非同步操作,將在1秒後執行
//這是一個非同步操作,將在2秒後執行
如果把延遲秒數改成0秒,輸出結果跟上面例子一模ㄧ樣,而非照順序執行,這是因為當JavaScript引擎看到setTimeout
時,會直接往下執行,並於 計時完成後
把setTimeout要做的事放進Event Queue,等待JavaScript執行環境全部淨空後才逐一檢查Event Queue裡等待執行的內容並將其推回執行環境執行
先進先出
,非同步函式或事件儲列之處,也叫callback queue不是太難理解,只是專有名詞很多,簡單想就是因為JavaScript引擎同步作業的關係,為防止因非同步函式造成整個專案卡住的狀況,把這些非同步函式拉到Event Queue中排隊等待主執行環境被執行的整個流程。
努力看完天書後,來點輕鬆的吧!分享我兒子的童言童語,調劑身心一下
昨天要出門前
阿嬤:哇!你戴帽子好帥喔!
啾啾:還可以!